<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


    <!-- 基本原理：通过Object.definePorperty()把data对象的所有属性添加到vm上，为每一个添加到
    vm上的属性，都指定一个getter和setter方法，在getter和setter内部去操作（读/写）data中
    对应的属性值 -->

    <script>
            let number=19

            let person={
            name:"张三",
            sex:"男",
            // age:18
        }

        Object.defineProperty(person,"age",{
            // value:19,
            // enumerable:true, //控制属性是否可以被枚举，默认是false
            // writable:true,   //控制属性是否可以被修改，默认是false
            // configurable:true //控制属性是否可以被删除，默认是false

            get:function(){//当有人读取person的age属性时，get函数（getter）就会被调用，且返回值就是age的值
                return number
            },

            set(value){
                console.log("有人修改了age属性了"); //没有改变peson的age值

                number = value  //这次修改了person的值

            }
           
        })
        console.log(Object.keys(person));
        console.log(person);
    </script>
    
</body>
</html>